package com.tien.utils.tree;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.tien.model.Menu;

/**
 * @author tienxin
 * @E-mail g.tianxin@gmail.com
 * @version 2012-2-19 下午06:14:59
 */
public class MenuTree {

	public static String parseMenuJason(List<Menu> menus) {
		// 节点列表（哈希表，用于临时存储节点对象）
		HashMap<String, Node> nodeList = new HashMap<String, Node>();
		// 根节点
		Node root = null;
		// 根据结果集构造节点列表（存入哈希表）
		for (Menu m : menus) {
			Node node = new Node();
			node.id = m.getId().toString();
			node.text = m.getName();
			if (null != m.getpId())
				node.parentId = m.getId().toString();
			nodeList.put(node.id, node);
		}

		// 构造有序的内存多叉树即menu
		StringBuffer menuJson = new StringBuffer();
		menuJson.append("[");
		for (String nodeId : nodeList.keySet()) {
			Node node = nodeList.get(nodeId);
			if (node.parentId == null || node.parentId.equals("")) {
				root = node;
				root.sortChildren();
				if(menuJson.length() > 1)
					menuJson.append("," + root.toString());
				else
					menuJson.append(root.toString());
			} else {
				((Node) nodeList.get(node.parentId)).children.addChild(node);
			}
		}
		menuJson.append("]");
		return menuJson.toString();
	}
}

/**
 * 节点比较器
 */
class NodeIDComparator implements Comparator {
	// 按照节点编号排序
	public int compare(Object o1, Object o2) {
		int j1 = Integer.parseInt(((Node) o1).id);
		int j2 = Integer.parseInt(((Node) o2).id);
		return (j1 < j2 ? -1 : (j1 == j2 ? 0 : 1));
	}
}